<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数据库水平切分完全指南</title>
    <link href="https://cdn.staticfile.org/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
    <link href="https://cdn.staticfile.org/tailwindcss/2.2.19/tailwind.min.css" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+SC:wght@400;500;600;700&family=Noto+Sans+SC:wght@300;400;500;700&display=swap" rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/mermaid@latest/dist/mermaid.min.js"></script>
    <style>
        body {
            font-family: 'Noto Sans SC', Tahoma, Arial, Roboto, "Droid Sans", "Helvetica Neue", "Droid Sans Fallback", "Heiti SC", "Hiragino Sans GB", Simsun, sans-serif;
            background: linear-gradient(135deg, #f5f7fa 0%, #c3cfe2 100%);
            min-height: 100vh;
        }
        
        .hero-gradient {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
        }
        
        .card-hover {
            transition: all 0.3s ease;
            border: 1px solid rgba(255, 255, 255, 0.1);
            backdrop-filter: blur(10px);
        }
        
        .card-hover:hover {
            transform: translateY(-5px);
            box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
            border-color: rgba(102, 126, 234, 0.5);
        }
        
        .section-title {
            position: relative;
            padding-left: 20px;
        }
        
        .section-title::before {
            content: '';
            position: absolute;
            left: 0;
            top: 50%;
            transform: translateY(-50%);
            width: 4px;
            height: 30px;
            background: linear-gradient(180deg, #667eea 0%, #764ba2 100%);
            border-radius: 2px;
        }
        
        .highlight-box {
            background: linear-gradient(135deg, rgba(102, 126, 234, 0.1) 0%, rgba(118, 75, 162, 0.1) 100%);
            border-left: 4px solid #667eea;
            padding: 20px;
            border-radius: 8px;
            margin: 20px 0;
        }
        
        .mermaid {
            background: white;
            padding: 30px;
            border-radius: 12px;
            box-shadow: 0 10px 30px rgba(0, 0, 0, 0.1);
        }
        
        .floating-icon {
            animation: float 3s ease-in-out infinite;
        }
        
        @keyframes float {
            0%, 100% { transform: translateY(0px); }
            50% { transform: translateY(-10px); }
        }
        
        .gradient-text {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            -webkit-background-clip: text;
            -webkit-text-fill-color: transparent;
            background-clip: text;
        }
        
        .list-item {
            position: relative;
            padding-left: 30px;
            margin-bottom: 15px;
        }
        
        .list-item::before {
            content: '\f00c';
            font-family: 'Font Awesome 6 Free';
            font-weight: 900;
            position: absolute;
            left: 0;
            top: 3px;
            color: #667eea;
        }
    </style>
</head>
<body>
    <!-- Hero Section -->
    <div class="hero-gradient text-white py-20 px-6">
        <div class="max-w-6xl mx-auto text-center">
            <div class="floating-icon inline-block mb-6">
                <i class="fas fa-database text-6xl opacity-90"></i>
            </div>
            <h1 class="text-5xl md:text-6xl font-bold mb-6">数据库水平切分完全指南</h1>
            <p class="text-xl md:text-2xl opacity-90 max-w-3xl mx-auto leading-relaxed">
                掌握分库分表的核心技术，构建高性能、可扩展的数据库架构
            </p>
            <div class="mt-10 flex justify-center space-x-8">
                <div class="text-center">
                    <div class="text-3xl font-bold">8</div>
                    <div class="text-sm opacity-80">核心要点</div>
                </div>
                <div class="text-center">
                    <div class="text-3xl font-bold">20+</div>
                    <div class="text-sm opacity-80">最佳实践</div>
                </div>
                <div class="text-center">
                    <div class="text-3xl font-bold">100%</div>
                    <div class="text-sm opacity-80">实战导向</div>
                </div>
            </div>
        </div>
    </div>

    <!-- Main Content -->
    <div class="max-w-6xl mx-auto px-6 py-12">
        <!-- Introduction -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-12">
            <p class="text-lg leading-relaxed text-gray-700 indent-8">
                在进行数据库水平切分（即分库分表）时，需要考虑多个关键问题，以确保切分后的系统能够高效、稳定地运行。合理的设计和策略能够确保切分后的系统在性能、稳定性和可维护性上的优越性。
            </p>
        </div>

        <!-- Architecture Diagram -->
        <div class="mb-12">
            <h2 class="text-3xl font-bold text-center mb-8 gradient-text">数据库水平切分架构全景</h2>
            <div class="mermaid">
                graph TB
                    A[数据库水平切分] --> B[分片策略]
                    A --> C[数据一致性]
                    A --> D[查询优化]
                    A --> E[数据迁移]
                    A --> F[负载均衡]
                    A --> G[备份恢复]
                    A --> H[监控故障]
                    A --> I[安全防护]
                    
                    B --> B1[分片键选择]
                    B --> B2[分片规则设计]
                    
                    C --> C1[分布式事务]
                    C --> C2[数据同步]
                    
                    D --> D1[跨分片查询]
                    D --> D2[索引优化]
                    
                    style A fill:#667eea,stroke:#fff,stroke-width:3px,color:#fff
                    style B fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style C fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style D fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style E fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style F fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style G fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style H fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
                    style I fill:#8b5cf6,stroke:#fff,stroke-width:2px,color:#fff
            </div>
        </div>

        <!-- Section 1: 分片策略选择 -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-8 card-hover">
            <h3 class="text-2xl font-bold mb-6 section-title flex items-center">
                <i class="fas fa-puzzle-piece mr-3 text-purple-600"></i>
                1. 分片策略选择
            </h3>
            
            <div class="grid md:grid-cols-2 gap-6">
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-key mr-2"></i>分片键选择
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>业务需求</strong>：选择合适的分片键是数据库水平切分的核心。分片键应基于业务需求选择，确保大多数查询能够在单个分片上完成，以减少跨分片查询的复杂性。
                        </div>
                        <div class="list-item">
                            <strong>均匀分布</strong>：分片键应能均匀分布数据，避免某个分片过载而其他分片空闲的情况。例如，选择用户ID、订单ID等具有较好散列特性的字段作为分片键。
                        </div>
                    </div>
                </div>
                
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-sitemap mr-2"></i>分片规则
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>范围分片</strong>：根据数据范围进行分片，例如根据时间区间或数值范围。
                        </div>
                        <div class="list-item">
                            <strong>哈希分片</strong>：通过对分片键进行哈希计算，将数据分布到不同的分片中。
                        </div>
                        <div class="list-item">
                            <strong>列表分片</strong>：根据具体的分片列表进行分片，例如按地区或部门分片。
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Section 2: 分片后的数据一致性 -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-8 card-hover">
            <h3 class="text-2xl font-bold mb-6 section-title flex items-center">
                <i class="fas fa-sync-alt mr-3 text-purple-600"></i>
                2. 分片后的数据一致性
            </h3>
            
            <div class="grid md:grid-cols-2 gap-6">
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-exchange-alt mr-2"></i>事务管理
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>分布式事务</strong>：在分片系统中，事务可能涉及多个分片。需要考虑使用分布式事务管理工具（如 XA、TCC、SAGA）来保证数据一致性。
                        </div>
                        <div class="list-item">
                            <strong>最终一致性</strong>：对于不需要强一致性的场景，可以采用最终一致性策略来减少分布式事务的复杂性。
                        </div>
                    </div>
                </div>
                
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-check-double mr-2"></i>数据一致性
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>数据复制</strong>：考虑数据的同步和复制机制，以保持数据的一致性。例如，使用数据同步工具或数据复制技术来确保分片间的数据一致性。
                        </div>
                        <div class="list-item">
                            <strong>一致性哈希</strong>：使用一致性哈希算法来处理分片键变化或分片增加时的数据重新分配问题。
                        </div>
                    </div>
                </div>
            </div>
        </div>

        <!-- Section 3: 查询和索引设计 -->
        <div class="bg-white rounded-2xl shadow-xl p-8 mb-8 card-hover">
            <h3 class="text-2xl font-bold mb-6 section-title flex items-center">
                <i class="fas fa-search mr-3 text-purple-600"></i>
                3. 查询和索引设计
            </h3>
            
            <div class="grid md:grid-cols-2 gap-6">
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-tachometer-alt mr-2"></i>查询优化
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>跨分片查询</strong>：尽量避免跨分片查询。如果必须进行跨分片查询，确保查询效率，例如使用分布式查询引擎。
                        </div>
                        <div class="list-item">
                            <strong>分片内查询优化</strong>：在每个分片内部，使用合适的索引设计来优化查询性能。
                        </div>
                    </div>
                </div>
                
                <div class="highlight-box">
                    <h4 class="text-xl font-semibold mb-4 text-purple-700">
                        <i class="fas fa-list-ol mr-2"></i>索引策略
                    </h4>
                    <div class="space-y-3">
                        <div class="list-item">
                            <strong>分片键索引</strong>：确保分片键上有索引，以加速数据定位。
                        </div>
                        <div class="list-item">
                            <strong>复合索引</strong>：根据业务需求，设计复合索引来优化常见的查询场景。
                        </div>